package com.ffggffgfv.backend.service;

import com.ffggffgfv.backend.dto.*;
import com.ffggffgfv.backend.entity.Admin;

import java.util.Map;

/**
 * 管理员服务接口
 */
public interface AdminService {

    /**
     * 管理员登录
     *
     * @param loginDTO 登录信息
     * @return 登录结果
     */
    Map<String, Object> login(AdminLoginDTO loginDTO);

    /**
     * 通过ID获取管理员信息
     *
     * @param id 管理员ID
     * @return 管理员详细信息
     */
    AdminInfoDTO getAdminInfo(Long id);

    /**
     * 通过ID获取管理员实体
     *
     * @param id 管理员ID
     * @return 管理员实体
     */
    Admin findById(Long id);

    /**
     * 通过用户名获取管理员实体
     *
     * @param username 用户名
     * @return 管理员实体
     */
    Admin findByUsername(String username);

    /**
     * 分页查询管理员列表
     *
     * @param username 用户名（可选）
     * @param status   状态（可选）
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 分页结果
     */
    PageResult<Admin> findByPage(String username, Integer status, int pageNum, int pageSize);

    /**
     * 创建管理员
     *
     * @param admin 管理员对象
     * @return 创建的管理员
     */
    Admin createAdmin(Admin admin);

    /**
     * 更新管理员信息
     *
     * @param id        管理员ID
     * @param updateDTO 更新信息
     * @return 更新后的管理员
     */
    Admin updateAdmin(Long id, AdminUpdateDTO updateDTO);

    /**
     * 修改管理员状态
     *
     * @param id     管理员ID
     * @param status 状态（0-停用 1-启用）
     * @return 是否成功
     */
    boolean updateStatus(Long id, Integer status);

    /**
     * 分配管理员角色
     *
     * @param adminId     管理员ID
     * @param userRoleDTO 角色ID列表
     * @return 是否成功
     */
    boolean assignRoles(Long adminId, UserRoleDTO userRoleDTO);

    /**
     * 判断用户名是否已存在
     *
     * @param username 用户名
     * @return 是否存在
     */
    boolean isUsernameExists(String username);

    /**
     * 管理员注册（仅用于测试）
     *
     * @param registerDTO 注册信息
     * @return 注册成功的管理员信息
     */
    Admin register(AdminRegisterDTO registerDTO);
}
